import 'package:convergence_media/di/di.dart';
import 'package:convergence_media/features/app/entities/app_config_model.dart';
import 'package:isar/isar.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

part 'app_config_repository.g.dart';

/// 应用仓库的依赖注入
@riverpod
AppConfigRepository appConfigRepository(AppConfigRepositoryRef ref) {
  return AppConfigRepository(isar: ref.watch(appIsarProvider));
}

/// {@template app_config_repository}
/// 应用的配置存储库，初始化的时候会检查是否存在数据
/// {@endtemplate}
class AppConfigRepository {
  /// {@macro app_config_repository}
  AppConfigRepository({required Isar isar}) : _isar = isar {
    /// 针对首次启动处理
    if (_appConfigModel == null) {
      _isar.writeTxnSync(
        () => _isar.appConfigModels.putSync(
          const AppConfigModel(),
        ),
      );
    }
  }

  final Isar _isar;

  /// 本地获取 appConfigModel 的编写写法
  AppConfigModel? get _appConfigModel => _isar.appConfigModels.getSync(0);

  /// 偷懒方法，获取所有的配置文件
  AppConfigModel? getAppConfig() => _appConfigModel;

  /// 偷懒方法，存储所有配置文件
  Id putAppConfig(AppConfigModel appConfigModel) =>
      _isar.writeTxnSync(() => _isar.appConfigModels.putSync(appConfigModel));

  /// 获取和手机号绑定的所有数据库的唯一索引
  Id? getCurrentHashId() => _appConfigModel?.hashPhoneNumber;

  /// 通过手机号码设置索引
  Future<Id> putPhoneNumber(String phoneNumber) {
    final newAppConfigModel = _appConfigModel!.copyWith(
      phoneNumber: phoneNumber,
    );
    return _isar.writeTxn(
      () => _isar.appConfigModels.put(newAppConfigModel),
    );
  }
}
